CREATE TABLE [dbo].[tb_AperturasDeReestructura]
(
[idAperturaReestructura] [int] NOT NULL IDENTITY(1, 1),
[CUPOF] [varchar] (60) COLLATE SQL_Latin1_General_CP1_CI_AS NULL CONSTRAINT [DF_tb_AperturasDeReestructura_CUPOF] DEFAULT ('NN'),
[Reestructura] [int] NOT NULL,
[Organizacion] [int] NULL,
[Suborganizacion] [int] NOT NULL,
[Funcion] [int] NOT NULL,
[Asignatura] [int] NULL,
[Division] [int] NULL,
[DivisionAAbrir] [int] NULL,
[Turno] [int] NOT NULL,
[FechaAlta] [datetime] NOT NULL,
[NroSecuencia] [int] NOT NULL CONSTRAINT [DF_tb_AperturasDeReestructura_NroSecuencia] DEFAULT ((0)),
[Horas] [int] NOT NULL,
[NormaCreacion] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Baja] [varchar] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[FechaBaja] [datetime] NULL,
[NormaCierre] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Sistema] [int] NOT NULL,
[RegimenLaboral] [int] NOT NULL,
[Financiamiento] [int] NOT NULL,
[Presupuesto] [int] NOT NULL,
[Finalidad] [int] NOT NULL,
[TipoDeFuncion] [int] NOT NULL,
[RegimenSalarial] [int] NOT NULL,
[RegimenSuplencias] [int] NOT NULL,
[RegimenDesign] [int] NULL,
[Temporalidad] [int] NOT NULL,
[CargoSalarialDefault] [int] NOT NULL,
[Horario] [varchar] (340) COLLATE SQL_Latin1_General_CP1_CI_AS NULL CONSTRAINT [DF_tb_AperturasDeReestructura_Horario] DEFAULT ('lun: 08:00 a 09:30; mar: 08:00 a 09:30; mie: 08:00 a 09:30; jue: 08:00 a 09:30; vie: 08:00 a 09:30;'),
[Paquete] [int] NULL,
[EsJefeDeOrg] [varchar] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Observaciones] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Estado] [int] NOT NULL CONSTRAINT [DF_tb_AperturasDeReestructura_Estado] DEFAULT ((12)),
[IdPlazaOperativa] [int] NULL
) ON [PRIMARY]
EXEC sp_bindrule N'[dbo].[S-N]', N'[dbo].[tb_AperturasDeReestructura].[EsJefeDeOrg]'

ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD
CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Organizaciones] FOREIGN KEY ([Organizacion]) REFERENCES [dbo].[tb_Organizaciones] ([idOrganizaciones])
ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Organizaciones]
ALTER TABLE [dbo].[tb_AperturasDeReestructura] ADD
CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Asignaturas] FOREIGN KEY ([Asignatura]) REFERENCES [dbo].[tb_Asignaturas] ([idAsignatura])
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[delPlaza] ON [dbo].[tb_AperturasDeReestructura] 
FOR DELETE 
AS

DECLARE @Estado INT
DECLARE @Reestructura INT

SELECT @Estado = R.Estado, @Reestructura = R.IdReestructura FROM deleted INNER JOIN tb_Reestructuras R ON R.IdReestructura = Reestructura

IF @Estado NOT IN(15, 16, 18) BEGIN
	UPDATE tb_Reestructuras SET Estado = 12 WHERE IdReestructura = @Reestructura
END
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[generarCUPOFReestructura] ON [dbo].[tb_AperturasDeReestructura]
FOR UPDATE, INSERT
AS

DECLARE @IdAperturaReestructura INT
DECLARE @OrgSuborganizacion INT
DECLARE @Asignatura INT
DECLARE @Suborganizacion INT

SELECT @idAperturaReestructura=inserted.idAperturaReestructura,@Asignatura=inserted.Asignatura,@Suborganizacion=inserted.Suborganizacion FROM inserted INNER JOIN tb_AperturasDeReestructura A ON A.idAperturaReestructura = inserted.idAperturaReestructura

SELECT @OrgSuborganizacion=Org FROM dbo.tb_SubOrganizaciones WHERE idSubOrganizacion=@Suborganizacion

IF @OrgSuborganizacion IS NOT NULL BEGIN
	UPDATE dbo.tb_AperturasDeReestructura SET Organizacion = @OrgSuborganizacion WHERE idAperturaReestructura = @idAperturaReestructura 
END
ELSE BEGIN
	ROLLBACK transaction 
	RAISERROR('La Sub Organizacion es nula', 16,1)
END

IF @Asignatura IS NULL BEGIN
	UPDATE dbo.tb_AperturasDeReestructura SET Asignatura = 2423 WHERE idAperturaReestructura = @idAperturaReestructura
END

IF (UPDATE(Asignatura)) OR (UPDATE(Funcion)) OR (UPDATE(Division)) OR (UPDATE(DivisionAAbrir)) OR (UPDATE(Turno)) OR (UPDATE(Horas) OR (UPDATE(Presupuesto)) OR (UPDATE(RegimenSalarial)) OR (UPDATE(FechaAlta))) BEGIN

	DECLARE C CURSOR FOR SELECT IdAperturaReestructura FROM inserted 

	OPEN C

	FETCH NEXT FROM C INTO @IdAperturaReestructura

	WHILE @@FETCH_STATUS = 0 BEGIN

		EXEC paActualizarCupofReestructura  @IdAperturaReestructura
		FETCH NEXT FROM C INTO @IdAperturaReestructura

	END

	CLOSE C
	DEALLOCATE C

END
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[insPlaza] ON [dbo].[tb_AperturasDeReestructura] 
FOR INSERT 
AS

DECLARE @Estado INT
DECLARE @Reestructura INT
DECLARE @Organizacion INT
DECLARE @Suborganizacion INT
DECLARE @Division INT
DECLARE @SuborgDivision INT
DECLARE @OrgSuborganizacion INT
DECLARE @TipoFuncion INT
DECLARE @TipoFuncion_ok INT
DECLARE @Asignatura INT
DECLARE @idAperturaReestructura int


SELECT @idAperturaReestructura=inserted.idAperturaReestructura,@Asignatura=inserted.Asignatura,@TipoFuncion=inserted.TipoDeFuncion,@Organizacion=inserted.Organizacion, @Suborganizacion=inserted.Suborganizacion, @Division=inserted.Division FROM inserted INNER JOIN tb_AperturasDeReestructura A ON A.idAperturaReestructura = inserted.idAperturaReestructura

SELECT @OrgSuborganizacion=Org FROM dbo.tb_SubOrganizaciones WHERE idSubOrganizacion=@Suborganizacion

SELECT @SuborgDivision=idSubOrg FROM dbo.tb_Divisiones WHERE idDivision=@Division

IF @SuborgDivision<>@Suborganizacion BEGIN
	ROLLBACK transaction 
	RAISERROR('La Division no corresponde a la Sub Organizacion', 16,1)
END


SELECT @Estado = R.Estado, @Reestructura = R.IdReestructura FROM inserted INNER JOIN tb_Reestructuras R ON R.IdReestructura = Reestructura

IF @Estado=18 BEGIN
	ROLLBACK transaction 
	RAISERROR('La Reestructura ya esta en vigencia (fue ejecutada), imposible agregar mas plazas', 16,1)
END

SELECT DISTINCT @TipoFuncion_ok = tb_Plazas.TipoDeFuncion FROM dbo.tb_Plazas,inserted WHERE tb_Plazas.CargoSalarialDefault=inserted.CargoSalarialDefault

IF @TipoFuncion<>@TipoFuncion_ok BEGIN
	ROLLBACK transaction 
	RAISERROR('El tipo de funcion no corresponde al Cargo Salarial', 16,1)
END

IF @Estado NOT IN(15, 16, 18) BEGIN
	UPDATE tb_Reestructuras SET Estado = 12 WHERE IdReestructura = @Reestructura
END
GO


SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[insVariasPlaza] ON [dbo].[tb_AperturasDeReestructura] 
AFTER INSERT 
AS
DECLARE @contador INT
DECLARE @curso VARCHAR(17)
DECLARE @Division VARCHAR(25)

DECLARE @Reestructura INT

DECLARE @Organizacion INT 

DECLARE @Suborganizacion INT

DECLARE @Funcion INT

DECLARE @Asignatura INT

DECLARE @Division2 INT

DECLARE @Turno INT

DECLARE @FechaAlta DATETIME

DECLARE @NroSecuencia INT

DECLARE @Horas INT

DECLARE @NormaCreacion VARCHAR(50)

DECLARE @Baja VARCHAR(1)

DECLARE @FechaBaja DATETIME

DECLARE @NormaCierre VARCHAR(50)

DECLARE @Sistema INT

DECLARE @RegimenLaboral INT

DECLARE @Financiamiento INT

DECLARE @Presupuesto INT

DECLARE @Finalidad INT

DECLARE @TipoDeFuncion INT

DECLARE @RegimenSalarial INT

DECLARE @RegimenSuplencias INT

DECLARE @RegimenDesign INT

DECLARE @Temporalidad INT

DECLARE @CargoSalarialDefault INT

DECLARE @Horario VARCHAR(340)

DECLARE @Paquete INT

DECLARE @EsJefeDeOrg VARCHAR(1)

DECLARE @Observaciones VARCHAR(255)

DECLARE @Estado INT

DECLARE @IdPlazaOperativa INT


DECLARE @idAperturaReestructura INT
DECLARE @CUPOF VARCHAR(60)
DECLARE @DivisionAAbrir INT

declare C cursor static FOR SELECT * from inserted
open C
fetch next from C INTO @idAperturaReestructura
      ,@CUPOF
	  ,@Reestructura
      ,@Organizacion
      ,@Suborganizacion
      ,@Funcion
      ,@Asignatura
      ,@Division2
      ,@DivisionAAbrir
      ,@Turno
      ,@FechaAlta
      ,@NroSecuencia
      ,@Horas
      ,@NormaCreacion
      ,@Baja
      ,@FechaBaja
      ,@NormaCierre
      ,@Sistema
      ,@RegimenLaboral
      ,@Financiamiento
      ,@Presupuesto
      ,@Finalidad
      ,@TipoDeFuncion
      ,@RegimenSalarial
      ,@RegimenSuplencias
      ,@RegimenDesign
      ,@Temporalidad
      ,@CargoSalarialDefault
      ,@Horario
      ,@Paquete
      ,@EsJefeDeOrg
      ,@Observaciones
      ,@Estado
      ,@IdPlazaOperativa

close C
deallocate C

SET @contador=@NroSecuencia
SELECT @Division = Division FROM dbo.tb_Divisiones WHERE idDivision=@Division2;

WHILE @contador>1 BEGIN
	IF @Division =NULL BEGIN
    
		INSERT INTO tb_AperturasDeReestructura VALUES(
			'', @Reestructura,@Organizacion, @Suborganizacion, @Funcion, @Asignatura, @Division2,null, @Turno, @FechaAlta, @NroSecuencia, @Horas, @NormaCreacion, @Baja, @FechaBaja, @NormaCierre, @Sistema, @RegimenLaboral, @Financiamiento, @Presupuesto, @Finalidad, @TipoDeFuncion, @RegimenSalarial, @RegimenSuplencias, @RegimenDesign, @Temporalidad, @CargoSalarialDefault, @Horario, @Paquete, @EsJefeDeOrg, @Observaciones, @Estado, NULL)
	
	END	
	ELSE BEGIN  
		
		SET @curso = (SELECT curso FROM dbo.tb_Divisiones WHERE idDivision=@Division2)
		IF @curso='0' BEGIN

			INSERT tb_AperturasDeReestructura VALUES(
				'', @Reestructura,@Organizacion, @Suborganizacion, @Funcion, @Asignatura, @Division2,null, @Turno, @FechaAlta, @NroSecuencia, @Horas, @NormaCreacion, @Baja, @FechaBaja, @NormaCierre, @Sistema, @RegimenLaboral, @Financiamiento, @Presupuesto, @Finalidad, @TipoDeFuncion, @RegimenSalarial, @RegimenSuplencias, @RegimenDesign, @Temporalidad, @CargoSalarialDefault, @Horario, @Paquete, @EsJefeDeOrg, @Observaciones, @Estado, NULL)
	
		END      
		ELSE BEGIN      

		SELECT @Division=CHAR(ASCII(@Division)+1)
			
			INSERT dbo.tb_Divisiones
			        SELECT Mnemo , idSubOrg ,Descripcion ,EsGrupo ,Curso ,@Division ,GrupoCarreras ,Turno ,FechaAlta ,Baja ,FechaBaja ,CUISE ,EsPrivada ,Divpriv ,NTUser ,FechaCarga, NULL FROM dbo.tb_Divisiones WHERE idDivision=@Division2
			        
			INSERT tb_AperturasDeReestructura VALUES(
				'NN', @Reestructura,@Organizacion, @Suborganizacion, @Funcion, @Asignatura, SCOPE_IDENTITY(),null, @Turno, @FechaAlta, @NroSecuencia, @Horas, @NormaCreacion, @Baja, @FechaBaja, @NormaCierre, @Sistema, @RegimenLaboral, @Financiamiento, @Presupuesto, @Finalidad, @TipoDeFuncion, @RegimenSalarial, @RegimenSuplencias, @RegimenDesign, @Temporalidad, @CargoSalarialDefault, @Horario, @Paquete, @EsJefeDeOrg, @Observaciones, @Estado, NULL)
	
		END		      
        
	END
	SET @contador=@contador-1
END

GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] ADD CONSTRAINT [PK_tb_AperturasDeReestructura] PRIMARY KEY NONCLUSTERED  ([idAperturaReestructura]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_CargosSalariales] FOREIGN KEY ([CargoSalarialDefault]) REFERENCES [dbo].[tb_CargosSalariales] ([idCargo])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Divisiones] FOREIGN KEY ([Division]) REFERENCES [dbo].[tb_Divisiones] ([idDivision])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_EstadosDeReestructura] FOREIGN KEY ([Estado]) REFERENCES [dbo].[tb_EstadosDeReestructura] ([idEstadoReestructura])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Finalidades] FOREIGN KEY ([Finalidad]) REFERENCES [dbo].[tb_Finalidades] ([idFinalidad])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_FuentesDeFinanciamiento] FOREIGN KEY ([Financiamiento]) REFERENCES [dbo].[tb_FuentesDeFinanciamiento] ([idFuenteFinanciamiento])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_FuncionesLUI] FOREIGN KEY ([Funcion]) REFERENCES [dbo].[tb_Funciones] ([idFuncion])
GO

ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_PaquetesDePlazas] FOREIGN KEY ([Paquete]) REFERENCES [dbo].[tb_PaquetesDePlazas] ([idPaquete])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_PartidasPresupuestarias] FOREIGN KEY ([Presupuesto]) REFERENCES [dbo].[tb_PartidasPresupuestarias] ([idPartida])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Reestructuras] FOREIGN KEY ([Reestructura]) REFERENCES [dbo].[tb_Reestructuras] ([IDReestructura])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_RegimenDesignaciones] FOREIGN KEY ([RegimenDesign]) REFERENCES [dbo].[tb_RegimenDesignaciones] ([idRegimenDesignacion])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_RegimenLaboral] FOREIGN KEY ([RegimenLaboral]) REFERENCES [dbo].[tb_RegimenLaboral] ([idRegimenLaboral])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_RegimenSalarial] FOREIGN KEY ([RegimenSalarial]) REFERENCES [dbo].[tb_RegimenSalarial] ([idRegimenSalarial])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_RegimenDeSuplencias] FOREIGN KEY ([RegimenSuplencias]) REFERENCES [dbo].[tb_RegimenDeSuplencias] ([idRegimenSuplencia])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Sistemas] FOREIGN KEY ([Sistema]) REFERENCES [dbo].[tb_Sistemas] ([idSistema])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_SubOrganizaciones] FOREIGN KEY ([Suborganizacion]) REFERENCES [dbo].[tb_SubOrganizaciones] ([idSubOrganizacion])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Temporalidad] FOREIGN KEY ([Temporalidad]) REFERENCES [dbo].[tb_Temporalidad] ([idTemporalidad])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_TiposDeFuncion] FOREIGN KEY ([TipoDeFuncion]) REFERENCES [dbo].[tb_TiposDeFuncion] ([idTipoFuncion])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] WITH NOCHECK ADD CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Turnos] FOREIGN KEY ([Turno]) REFERENCES [dbo].[tb_Turnos] ([idTurno])
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Divisiones]
GO

ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Reestructuras]
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Sistemas]
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_SubOrganizaciones]
GO
ALTER TABLE [dbo].[tb_AperturasDeReestructura] NOCHECK CONSTRAINT [FK_tb_AperturasDeReestructura_tb_Turnos]
GO
EXEC sp_bindrule N'[dbo].[S-N]', N'[dbo].[tb_AperturasDeReestructura].[Baja]'
GO
